import os
import shutil
import argparse
from pathlib import Path

def copy_folder(source: str, destination: str, overwrite: bool = False) -> None:
    """
    递归复制文件夹及其内容

    参数:
        source (str): 源文件夹路径
        destination (str): 目标文件夹路径
        overwrite (bool): 是否覆盖已存在的文件，默认为 False
    """
    try:
        # 检查源文件夹是否存在
        if not os.path.exists(source):
            raise FileNotFoundError(f"源文件夹不存在: {source}")

        # 确保目标目录存在
        os.makedirs(destination, exist_ok=True)

        # 遍历源文件夹中的所有内容
        for item in os.listdir(source):
            source_item = os.path.join(source, item)
            dest_item = os.path.join(destination, item)

            if os.path.isdir(source_item):
                # 递归复制子文件夹
                copy_folder(source_item, dest_item, overwrite)
            else:
                # 复制文件
                if not os.path.exists(dest_item) or overwrite:
                    shutil.copy2(source_item, dest_item)
                    print(f"复制: {source_item} -> {dest_item}")
                else:
                    print(f"跳过已存在的文件: {dest_item}")

    except Exception as e:
        print(f"错误: {e}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="复制文件夹及其内容")
    parser.add_argument("source", help="源文件夹路径")
    parser.add_argument("destination", help="目标文件夹路径")
    parser.add_argument("-f", "--force", action="store_true", 
                        help="覆盖已存在的文件")
    args = parser.parse_args()

    copy_folder(args.source, args.destination, args.force)    